ikingye

ikingye 查看完整档案

深圳编辑西安电子科技大学  |  计算机科学与技术 编辑百度深圳  |  高级研发工程师 编辑 kingye.me 编辑
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

ikingye 赞了回答 · 1月5日

mac下 vscode 的terminal如何做到像iterm2一样选中即复制?

settings.json中加上下面这行就可以了

"terminal.integrated.copyOnSelection": true

关注 3 回答 1

ikingye 赞了回答 · 2020-07-07

解决go struct 方法使用指针与不使用指针的区别?

结构方法等价于

 func SetUsername1(u User, username string){
    u.username = username ;
 }

 func SetUsername2(u *User,username string){
    u.username = username ;
 }

这样就明白了,一个是值传递,一个是指针传递

关注 10 回答 7

ikingye 赞了问题 · 2020-07-07

解决go struct 方法使用指针与不使用指针的区别?

  1. 如下代码,不知道区别是什么!

 type User struct {
     username string 
 }

 func (u User) SetUsername1(username string){
    u.username = username ;
 }

 func (u *User) SetUsername2(username string){
    u.username = username ;
 }
 

这里 申明方法的时候使用 u User 与使用 u *User 的区别是什么?以及使用注意事项?

关注 10 回答 7

ikingye 赞了回答 · 2020-06-29

go语言go get出错

翻墙可以从根上解决问题,并且不会再犯,降低以后的工作量和时间浪费

关注 8 回答 4

ikingye 赞了问题 · 2020-05-30

解决关于 Go 语言中 const 的问题

本问题来自《Go语言圣经》中 GIF 动画 中的代码,作用是生成一个利萨如图形 GIF。

代码如下:

// Lissajous generates GIF animations of random Lissajous figures.
package main

import (
    "fmt"
    "image"
    "image/color"
    "image/gif"
    "io"
    "math"
    "math/rand"
    "os"
    "reflect"
)

var palette = []color.Color{color.White, color.RGBA{0x6C, 0x9F, 0xB4, 0xff}}

const (
    whiteIndex = 0 // first color in palette
    greenIndex = 1 // second color in palette
)

func main() {
    lissajous(os.Stdout)
}

func lissajous(out io.Writer) {
    const (
        cycles  = 5     // number of complete x oscillator revolutions
        res     = 0.001 // angular resolution
        size    = 100   // image canvas covers [-size..+size]
        nframes = 64    // number of animation frames
        delay   = 8     // delay between frames in 10ms units
    )

    freq := rand.Float64() * 3.0 // relative frequency of y oscillator
    anim := gif.GIF{LoopCount: nframes}
    phase := 0.0 // phase difference
    for i := 0; i < nframes; i++ {
        rect := image.Rect(0, 0, 2*size+1, 2*size+1)
        img := image.NewPaletted(rect, palette)
        for t := 0.0; t < cycles*2*math.Pi; t += res {
            x := math.Sin(t)
            y := math.Sin(t*freq + phase)
            img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5), greenIndex)
        }
        phase += 0.1
        anim.Delay = append(anim.Delay, delay)
        anim.Image = append(anim.Image, img)
    }

    // gif.EncodeAll(out, &anim) // NOTE: ignoring encoding errors

    fmt.Println(reflect.TypeOf(cycles))
}

不输出 gif,执行代码查看 cycles 的类型为 int.

% go run lissajous.go
int

将 cycles 的声明语句改为 var cycles = 5 后出错,这里 cycles 也是 int 型。

% go run lissajous.go
# command-line-arguments
./lissajous.go:44: constant 3.14159 truncated to integer
./lissajous.go:44: invalid operation: t < cycles * 2 * math.Pi (mismatched types float64 and int)

尝试改成 var cycles = 5.0 后,cycles 的类型为 float64,代码能正常运行。

问题

为什么用 const 声明的 intvar 声明的 int 会有差别?

关注 3 回答 3

ikingye 赞了问题 · 2020-05-25

git clone 的参数`depth=1`有什么用?

git clone 的参数depth=1有什么用?

git clone --depth=1 git://someserver/somerepo

关注 2 回答 1

ikingye 赞了回答 · 2020-05-17

解决Go语言中怎么把interface{}类型当成slice使用?

我大概明白题主是什么问题,我遇到过类似的问题,题主应该是需要这个函数:

func ToSlice(arr interface{}) []interface{} {
  v := reflect.ValueOf(arr)
  if v.Kind() != reflect.Slice {
    panic("toslice arr not slice")
  }
  l := v.Len()
  ret := make([]interface{}, l)
  for i := 0; i < l; i++ {
    ret[i] = v.Index(i).Interface()
  }
  return ret
}

我是实际写代码时候遇到类似的就是[]int,[]float,[]string等作为输入,输出是将其元素都tostr然后join一下。每个元素tostr可以单独写一个泛型的实现,入参是float还是int等都是可以的:

func ToStr(i interface{}) string {
  return fmt.Sprintf("%v", i)
}
ToStr(1)
ToStr(float64(1))

而如果更进一步封装接口Join时候

func Join(i []interface{}) string {
}
Join([]int{1,2})  // 报错:类型不匹配

解决方法就是上面的ToSlice函数

Join(ToSlice([]int{1,2}))

关注 4 回答 4

ikingye 赞了回答 · 2020-05-14

解决golang time.Now() 格式化的问题。

2006是go语言在google内部谋划的日子,后面依次是1、2、15(3)、4、5的顺序表示,你可以这么记。哈哈

关注 5 回答 4

ikingye 赞了回答 · 2020-04-16

解决Laravel 里为什么可以用Model::where(),却不能用Model::getTable()

在Model中,where方法是不存在的,而getTable方法却是存在的。之所以这么说,是php因为兼容性的考虑,在检查方法是否存在的时候,并不会去检查是不是静态方法,只要方法存在,不管是静态还是非静态,都认为是方法存在的,因此就不会调用__callStatic方法了。

这也就造成了调用Model::where的时候,由于where方法是在Illuminate\Database\Eloquent\Builder中定义的,__call将该方法的调用代理到了Builder上,因此可以调用。而getTable方法,则因为是Model中的实例方法,做方法存在性判断的时候发现方法有了,就不会去调用__callStatic,直接对该方法进行静态调用,所有就抛出了

Non-static method IlluminateDatabaseEloquentModel::getTable() should not be called statically, assuming $this from incompatible context

关注 7 回答 4

ikingye 赞了回答 · 2020-04-09

session中应该存储哪些信息?

用过PHP/Ruby(Rails)/Java(Spring Boot), 从传统单体网站到前后端分离的API, 不知不觉已经忘记了 session 是什么了~

PHP 的 $_SESSION 可以在单机应用中方便的使用 session. 请求携带 cookies 信息来请求PHP Server, PHP 默认去基于文件的会话管理器中找会话ID, 找不到就认为这是一个新会话. 如果已经存在会话了,session_start() 就把文件中的内容反序列化到 $_SESSION 中, 以供读取; set session 就是把对象序列化到那个指定文件中.

Rails 默认的 Session 是基于 cookies 的, 这有效的反驳了 "session是存在服务器的" 说法, 你可以说 "session 是给服务器用的", session存在哪都可以. 当然, Rails 的 session 并不会明文的保存, 保存的是经过服务端加密之后的密文.

当前后端分离之后, session 的概念就越来越淡了. 我们使用 token 或者 jwt 来验证用户身份, 通过之后再进行下一步的业务逻辑. 取用户信息可能会使用进程内的缓存, 也可能使用分布式缓存, 已经把具体的 session 概念分解了.

关注 15 回答 11

认证与成就

  • 获得 13 次点赞
  • 获得 24 枚徽章 获得 0 枚金徽章, 获得 6 枚银徽章, 获得 18 枚铜徽章

擅长技能
编辑

(゚∀゚ )
暂时没有

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-09-11
个人主页被 688 人浏览