stevewang

第 1556 号会员 /

回复了 创建的主题:

招聘当地人可行性更高。

回复了 shook 创建的主题: Golang的指针赋值有没有更方便的方法?

*string相当于多了一次指针访问,性能上会稍微差一些;另外如果数量很多的话,GC压力也会增加,因为要额外在堆上创建很多的string对象。

回复了 shook 创建的主题: Golang的指针赋值有没有更方便的方法?

我的意思是,你可以直接使用NullString类型根据Valid的值来处理nil的情况,不是一定要用数据库。或者把那个类型的定义复制到自己的包里 也可以。

回复了 shook 创建的主题: Golang的指针赋值有没有更方便的方法?

需要两条语句,但是不需要多定义一个变量:

type Test struct {
    ID   int64
    Name *string
    PWD  string
    Time time.Time
}

func main() {
    t := new(Test)
    t.Name = new(string)
    *t.Name = "zhangsan"
    fmt.Println(*t.Name)
}

另外,一般很少需要用到*string类型。你为什么不直接使用string呢?

回复了 ssqq 创建的主题: append, copy 哪个更高效

append的实现就是copy,如果内存不够还要先申请内存,所以当然是copy高效。不过用途不同,也不能直接比较。
另外,为什么你的主题都要重复发贴呢?

回复了 ssqq 创建的主题: 既然 slice 是指针,为什么不能原地修改

slice实际上是个struct:

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

调用函数change_runes([]rune)时,实际上是复制了一个slice这个struct对象作为参数传递给函数,函数里的s = s[1:]这个语句实际上是修改了参数对象,但是没有修改函数外部的slice对象,也没有修改底层的array,所以函数mainx当然是没有被修改的。

不过你可以通过change_rune返回值来达到你想要的效果,类似append内建函数:

package main

import "fmt"

func change_runes(s []rune) []rune {
    return s[1:]
}

func main() {
    x := []rune{1, 2}
    x = change_runes(x)
    fmt.Println(x)
}

回复了 joeonly 创建的主题: 请问map为什么不能作为匿名成员继承

如果没有线程同步问题的话,不需要搞得那么复杂,直接通过成员变量访问就可以了。

type T struct {
    m map[string]string
}

func NewT() *T {
    return &{
        m: make(map[string]string),
    }
}

func main() {
    t := NewT()
    t.m["bb"] = "cc"
}

回复了 lstarboy 创建的主题: 字符分割

没有现成的,只能自己实现。

package main

import (
    "fmt"
)

func Split(str string) []string {
    var result []string
    quoted := false
    pos := 0
    for i := 0; i < len(str); i++ {
        switch str[i] {
        case '"':
            quoted = !quoted
        case ',':
            if !quoted {
                result = append(result, str[pos:i])
                pos = i + 1
            }
        }
    }
    // 允许空字符串
    result = append(result, str[pos:len(str)])
    return result
}

func main() {
    s := Split(`"asf,ws",af`)
    fmt.Println(s, len(s))
}