当我安装 LLVM 时,发生错误:
? build make
[ 0%] Linking CXX static library ../libLLVMSupport.a
libtool: unrecognized option `-static'
libtool: Try `libtool --help' for more information.
make[2]: *** [lib/libLLVMSupport.a] Error 1
make[1]: *** [lib/Support/CMakeFiles/LLVMSupport.dir/all] Error 2
make: *** [all] Error 2
? build which libtool
/usr/local/bin/libtool
Run Code Online (Sandbox Code Playgroud)
我已经尝试解决它,但失败了。
http://flummox-engineering.blogspot.com/2014/04/libtool-unrecognized-option-static.html
以下代码给出编译时错误:
type IFile interface {
Read() (n int, err error)
Write() (n int, err error)
}
type TestFile struct {
*IFile
}
Run Code Online (Sandbox Code Playgroud)
错误:
./test.go:18:嵌入类型不能是指向接口的指针
为什么我不能嵌入*IFile?
Golang支持为多个左侧变量分配多个返回值.例如:
func test() (string, string) {
return "1", "1"
}
a, b := test()
Run Code Online (Sandbox Code Playgroud)
要么
a, _ := test()
Run Code Online (Sandbox Code Playgroud)
并且接收变量和返回值的数量必须匹配:
b = test() //wrong
Run Code Online (Sandbox Code Playgroud)
但是对于某些内置类型,例如[]或< - ,支持可变数量的返回值
key, exist := map[key]
key := map[key]
Run Code Online (Sandbox Code Playgroud)
我可以从这样的频道读取价值
c <- myChan
c, exist <- myChan
Run Code Online (Sandbox Code Playgroud)
我们如何解释这种不一致?这是核心运行/语言保留的功能吗?
func main() {
slice := make([]int, 10, 10)
slice[0] = 0
slice[1] = 1
slice1 := slice
slice1[0] = 10000
fmt.Println(slice)
slice1 = append(slice1, 100)
slice1[0] = 20000
fmt.Println(slice)
}
Run Code Online (Sandbox Code Playgroud)
结果:
[10000 1 0 0 0 0 0 0 0 0]
[10000 1 0 0 0 0 0 0 0 0]
在我的理解中,slice是一个指针,slice1并slice指向同一个数组,第一个输出也证明了这一点.但是slice,在追加行动改变后,为什么价值保持不变slice1?
type student struct {
Name string
Age int
}
func main() {
m := make(map[string]*student)
s := []student{
{Name: "Allen", Age: 24},
{Name: "Tom", Age: 23},
}
for _, stu := range s {
m[stu.Name] = &stu
}
fmt.Println(m)
for key, value := range m {
fmt.Println(key, value)
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
地图[艾伦:0xc42006a0c0 汤姆:0xc42006a0c0]
艾伦和{汤姆 23}
汤姆 &{汤姆 23}
如何解释Slice的现象,在我看来,stu应该是s的每个成员的地址,但是从结果来看,s的地址是相同的。